#pragma once
//#include "BasicRect.h"
//#include "Line.h"

class Str;
class Direction3D;
class Vector3D;

class Point3D
{
private:
    double x,y,z;
public:
    Point3D();
    Point3D(double x,double y,double z);
    ~Point3D();
    Point3D& set(double x,double y,double z);
    double getX();
    double getY();
    double getZ();
    Point3D& setX(double x);
    Point3D& setX(Point3D &pt);
    Point3D& setY(double y);
    Point3D& setY(Point3D &pt);
    Point3D& setZ(double z);
    Point3D& setZ(Point3D &pt);
    double distance(Point3D &pt);
	Point3D& direction(Point3D &pt, Direction3D &dir);
    Point3D& copy(Point3D &pt);
    Point3D& add(Point3D &pt);
	Point3D& add(Vector3D &v);
    Point3D& sub(Point3D &pt);
	Point3D& sub(Vector3D &v);
    Point3D& move(Direction3D &dir, double distance);
    bool isEq(Point3D &pt);
    bool isNeq(Point3D &pt);
    Point3D& operator+=(Point3D &pt);
	Point3D& operator+=(Vector3D &v);
    Point3D& operator-=(Point3D &pt);
	Point3D& operator-=(Vector3D &v);
    Point3D& operator=(Point3D &pt);
	bool operator==(Point3D &pt);
	bool operator!=(Point3D &pt);
    
    Str toString();
    
    void useAsVertex();
    
    void draw();
    void draw_color(int hexColor);
    void draw_size(double radius);
    void draw_sizeColor(double radius, int hexColor);
};